int f1(void) { return 1; }

double f2(void) { return 2.2; }

template < class T >
using FuncTmp = T (*)(void);

template < class ...Types >
void funcX(FuncTmp<Types>... ft){}

template < class T> struct vec { };

template < class T >
using Tmp = vec<T>;

template < class ...Types >
void func( Tmp<Types...> ) { }

int main()
{
    vec<double> vd;
    vec<int> vi;

//    func(vd, vi);
    funcX(f1, f2);
    return 0;
}
